package  com.sodimac.util.commons
{
	import com.sodimac.util.alerts.alert;
	import com.sodimac.v2s.model.ComprasModelLocator;
	import com.sodimac.v2s.vo.SesionVO;
	
	import flash.external.ExternalInterface;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;              

    public class Session
    {
			private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
			private var url:String ="";
            
            public function Session()
            {
            }
            
			public function setSession(strPaisId:String, strEmpresa:String, strPedidoCorpId:String,
									   strUsuarioId:String, strNombreCompleto:String, strRolUser:String,
									   strIdioma:String, strModulo:String, strIM:String, urlRespuesta:String,
									   strTarget:String, strExec:String, strIdOC:String = null, strIdPO:String = null,
									   strFormaPago:String = null, strIdLC:String = null):void
			{
				
			    var sesion:SesionVO = new SesionVO(); 
			    var datosOk:Boolean = true;
			    var msg:String = "";
			    
			    //verifica datos sesion
			    if ( (datosOk) && UtilString.isEmpty(strPaisId) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta Código País.";
			    }
			    if ( (datosOk) && UtilString.isEmpty(strEmpresa) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Código Empresa.";
			    }
			    if ( (datosOk) && UtilString.isEmpty(strPedidoCorpId) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Pedido Corporativo.";
			    }
			    if ( (datosOk) && UtilString.isEmpty(strUsuarioId) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Login Usuario.";
			    }
			    if ( (datosOk) && UtilString.isEmpty(strNombreCompleto) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Nombre Usuario.";
			    }
			    if ( (datosOk) && UtilString.isEmpty(strRolUser) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Rol Usuario.";
			    }			    
			    if ( (datosOk) && UtilString.isEmpty(strIdioma) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Idioma.";
			    }	
			    if ( (datosOk) && UtilString.isEmpty(strModulo) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  Módulo.";
			    }				    			    
			    if ( (datosOk) && UtilString.isEmpty(strIM) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta  International Merchant.";
			    } 
			    if ( (datosOk) && UtilString.isEmpty(urlRespuesta) )
			    {
			    	datosOk = false;
			    	msg = "No es posible iniciar sesión, falta URL Respuesta.";
			    }			    

/*
				//check values for IG9
			    if ( UtilString.equalsIgnoreCase(strModulo, "SolicitudFPCorporativa") )
			    {

				    if ( (datosOk) && UtilString.isEmpty(strHideCorrecion) )
				    {
				    	datosOk = false;
				    	msg = "No es posible iniciar sesión, falta indicador de correción.";
			    	}			    
			    }
*/
				//check values for IG14
			    if ( UtilString.equalsIgnoreCase(strModulo, "ConfirmacionGeneracionPO")) 
			    {

				    if ( (datosOk) && UtilString.isEmpty(strIdOC) )
				    {
				    	datosOk = false;
				    	msg = "No es posible iniciar sesión, falta Nro. Orden Compra.";
			    	}			    
				    if ( (datosOk) && UtilString.isEmpty(strIdPO) )
				    {
				    	datosOk = false;
				    	msg = "No es posible iniciar sesión, falta Nro. PO.";
			    	}
			    }
				//check values for IG15
			    if ( UtilString.equalsIgnoreCase(strModulo, "ConfirmacionGeneracionLC") )
			    {

				    if ( (datosOk) && UtilString.isEmpty(strIdLC) )
				    {
				    	datosOk = false;
				    	msg = "No es posible iniciar sesión, falta Carta de Crédito.";
			    	}			    
			    }

				//review strIM
				if (strIM.indexOf('%') >= 0)
				{
					//replace URL especial characters
					strIM = strIM.replace(/%3C/g, '<');
					strIM = strIM.replace(/%3E/g, '>');
					strIM = strIM.replace(/%20/g, ' ');
					strIM = strIM.replace(/%27/g, '\'');
					//alert.success("PRUEBA INT MERCHANT:\n" +  strIM);
				}


			    if (datosOk)
			    {
			   		//set data session
				    sesion.codIataPais = strPaisId;
				    sesion.usuarioId = strUsuarioId;
				    sesion.usuarioNombre = strNombreCompleto;
				    sesion.pedidoCorpId = Number(strPedidoCorpId);
				    sesion.intMerchant = strIM;
				    sesion.rolUsuario = Number(strRolUser);
				    sesion.idioma = strIdioma;
				    sesion.empresa = strEmpresa;
				    sesion.modulo = strModulo;
				    sesion.urlResp = urlRespuesta;
				    sesion.target = strTarget;
				    sesion.exec = strExec;
				    
				    //valores requeridos sólo para IG 14 
				    if (strIdOC){
				    	sesion.IdOrdenCompra = Number(strIdOC);
				    }	
				    if (strIdPO){
				    	sesion.IdPurchasedOrder = Number(strIdPO);
				    }
				    if (strFormaPago){
				    	sesion.formaPago = strFormaPago;
				    }

				    
				    //TODO REVISAR NRO.LC en DURO
				    
				    //valores requeridos sólo para IG 15
				    if (strIdOC){
				    	sesion.IdCartaCredito = 100; ///Number(strIdLC);
				    }				    				    

				
					//set data object cabecera
					var objLocal:Object = new Object();
					objLocal.pais = strPaisId;
					objLocal.empresa = strEmpresa;
					objLocal.sucursal = "0";  // no se usa, valor por defecto = 0.
					
					var objHeader:Object = new Object();
					objHeader.idProceso = "Compras Corporativas";  
					objHeader.idUsuario = strUsuarioId;
					objHeader.localizacion = objLocal;
					objHeader.idAplicacion = "V2S-CC";  
					objHeader.version = "1.0";
					
					//set values in modelo
					modelo.sesion = sesion;
					modelo.cabecera = objHeader;
					modelo.isLogged = new Boolean(true);
			    } 
			    else
			    {
			    	modelo.isLogged = new Boolean(false);
			    	alert.warning(msg); 
			    }
			    
				trace("fin session");
					
			}
			
			 public function endSession():void
			{
		       //var url:String = "javascript:window.opener = self; self.close();";
		        var url:String = "javascript:window.opener='x';window.close()";
		        var urlReq:URLRequest = new URLRequest(url);
		        
		        modelo.sesion = null;
		        modelo.isLogged = false;
		        navigateToURL(urlReq,"_self");
		        				
			} 
			

		
			public function callbackBPM(resp:Object):void
	     	{
				
					url = modelo.sesion.urlResp;
					
					//completando URL
					if (!UtilString.isEmpty(modelo.sesion.target))
					{
						url += "&compTargetAction=" +  modelo.sesion.target;
						url += "&execId=" +  modelo.sesion.exec;
					}
					
					//add inputs
					if (resp.estado)
					{	
						url += "&$FO$instCompra.estado=" + resp.estado;
					}	
					if (resp.totalCompra)
					{	
						url += "&$FO$instCompra.totalCompra=" + resp.totalCompra;
					}
					if (resp.listadoPaises)
					{	
						url += "&$FO$instCompra.listadoPaises=" + resp.listadoPaises;
					}
					if (resp.problemaPrecio>=0)
					{	
						//IG8  0:Sin Problemas  - 1: Con Problemas
						url += "&$FO$instCompra.problemaPrecio=" + resp.problemaPrecio;    
					}
					if (resp.problemaCantidad>=0)
					{	
						//IG8  0:Sin Problemas  - 1: Con Problemas
						url += "&$FO$instCompra.problemaCantidad=" + resp.problemaCantidad;    
					}
					if (resp.codOrdenDeCompra)
					{	
						//IG12 numero de OC
						url += "&$FO$instCompra.codOrdenDeCompra=" + resp.codOrdenDeCompra;    
					}
					if (resp.parametroOpcional)
					{	
						//IG6 motivo de rechazo para incluir en mail
						url += "&$FO$instCompra.parametroOpcional=" + resp.parametroOpcional;    
					}					
					
//					if (resp.codigoCartadeCredito)
//					{	
//						//IG15 numero de LC
//						url += "&$FO$instCompra.codigoCartadeCredito=" + resp.codigoCartadeCredito;    
//					}					

					trace("---------------------------------------------");
					trace("CALL  BPM: " + url);
					trace("---------------------------------------------");
//					alert.confirm("CALL BPM: " + url, alertListern);

					//call JS method					
					if (ExternalInterface.available)
					{						
						ExternalInterface.call("responderBPM", url);
					}
					else
					{
						alert.error("Error sending data to BPM");
					} 
			        
			}	
			
			
			
/* 			public function alertListern(closeEvt:CloseEvent):void
	     	{			

				if (closeEvt.detail==Alert.YES) 
				{
					if (ExternalInterface.available)
					{						
						ExternalInterface.call("responderBPM", url);
					}
					else
					{
						alert.error("Error sending data to BPM");
					} 					
				}				
					
					
	     	} */
	     	
					
			

			
	}                
                
}